import api from '@/api/index'
import wx from 'weixin-js-sdk'
import {
  Toast
} from 'vant'

const commonWx = {
  getUrl () {
    return encodeURIComponent(window.location.href.split('#')[0])
  },
  async getCode () {
    const url = this.getUrl()
    api.wx.JSSDK({ url })
      .then((res) => {
        res = res.data
        if (res.code === api.CODE_OK && res.data) {
          const data = res.data
          wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
            appId: data.appId, // 必填，公众号的唯一标识
            timestamp: data.timestamp, // 必填，生成签名的时间戳
            nonceStr: data.nonceStr, // 必填，生成签名的随机串
            signature: data.signature, // 必填，签名
            jsApiList: ['openLocation', 'chooseImage', 'previewImage', 'getLocation', 'getLocalImgData', 'onMenuShareAppMessage', 'onMenuShareTimeline'] // 必填，需要使用的JS接口列表
          })
          wx.error((res) => { // config验证失败回调函数
            console.log(res)
          })
        }
      })
  },
  getOpenLocation (lat, lng, name, address) {
    this.getCode()
      .then(() => {
        wx.ready(() => {
          wx.openLocation({
            latitude: Number(lat), // 纬度，浮点数，范围为90 ~ -90
            longitude: Number(lng), // 经度，浮点数，范围为180 ~ -180。
            name: name, // 位置名
            address: address, // 地址详情说明
            scale: 15, // 地图缩放级别,整形值,范围从1~28。默认为最大
            infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
          })
        })
      })
  },
  async  getLocation (fn) {
    this.getCode()
      .then((res) => {
        wx.ready(() => {
          wx.getLocation({
            type: 'wgs84', // 默认为wgs84的gps坐标，如果要返回直接给openLocation用的火星坐标，可传入'gcj02'
            success: function (res) {
              fn(res.latitude, res.longitude)
            }
          })
        })
        wx.error((res) => { // config验证失败回调函数
          fn(0, 0)
        })
      })
  },
  async chooseImage (fn) {
    this.getCode()
      .then((res) => {
        wx.ready(() => {
          wx.chooseImage({
            count: 1, // 默认9
            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
            sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机，默认二者都有
            success: function (res) {
              if (res.localIds !== '') {
                fn(res.localIds)// 返回选定照片的本地ID列表，localId可以作为img标签的src属性显示图片
              }
            }
          })
        })
      })
  },
  previewImage (item, list) {
    this.getCode(item, list)
      .then(() => {
        wx.ready(() => {
          wx.previewImage({
            current: item, // 当前显示图片的http链接
            urls: list // 需要预览的图片http链接列表
          })
        })
      })
  },
  async getLocalImgData (item, fn) {
    this.getCode()
      .then(() => {
        wx.getLocalImgData({
          localId: item, // 图片的localID
          success: function (res) {
            if (res.localData !== '') {
              fn(res.localData) // localData是图片的base64数据，可以用img标签显示
            }
          }
        })
      })
  },
  /**
   * 分享
   * @param {shareTitle} 分享标题
   * @param {shareUrl} 分享链接
   * @param {shareImg} 分享图片
   * @param {shareDesc} 分享描述
   */
  async onMenuShareAppMessage (shareTitle, shareUrl, shareImg, shareDesc) {
    this.getCode(shareTitle, shareUrl, shareImg, shareDesc)
      .then(() => {
        wx.ready(() => {
          wx.onMenuShareTimeline({
            title: shareTitle, // 分享标题
            link: shareUrl, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: shareImg, // 分享图标
            cancel: () => { // 取消分享回调函数
              Toast({
                message: '取消分享',
                duration: 1000,
                forbidClick: true
              })
            }
          })
        })
        wx.error((res) => { // config验证失败回调函数
          console.log(res)
        })
      })
  },
  async onMenuShareTimeline (shareTitle, shareUrl, shareImg, shareDesc) {
    this.getCode(shareTitle, shareUrl, shareImg, shareDesc)
      .then(() => {
        wx.ready(() => {
          wx.onMenuShareAppMessage({
            title: shareTitle, // 分享标题
            desc: shareDesc, // 分享描述
            link: shareUrl, // 分享链接，该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
            imgUrl: shareImg, // 分享图标
            type: '', // 分享类型,music、video或link，不填默认为link
            dataUrl: '', // 如果type是music或video，则要提供数据链接，默认为空
            cancel: () => {
              Toast({
                message: '取消分享',
                duration: 1000,
                forbidClick: true
              })
            }
          })
        })
      })
  }
}
export default commonWx
